可以看出在上面这个3维转2维的过程中
SNE算法是基于概率框架的算法,简单归纳为, 在高维空间点与点相邻(相似)的概率分布和降维后在低维空间相邻(相似)的概率分布尽可能一致. 所以要做的基本任务有3件
在2002年的paper定义为
其中d的定义为点i与点j在高维空间的不相似度, 一个具体的方法是用缩放过的欧氏距离平方,注意根据具体的应用应该使用合适的定义而非一定是欧氏距离
而$\sigma$的选择方法为
关于复杂度perplexity的理解
下面是wiki上高斯分布的截图.
上面的式子也是高斯核,不过其方差variance也就是$\sigma^2$被固定为$1/2$,$y_i$和$y_j$为相对应低维空间的点
采用梯度下降法,需要给出代价函数(cost function)和关于$y_i$的一阶偏导.
梯度下降法是机器学习的最基本方法,请参见维基百科.
代价函数需要能够衡量低维空间的分布与高维空间的差距. 常见的函数就是KL散度(Kullback-Leibler divergences),也叫相对熵. 具体公式如下
具体含义请参见维基百科
代价函数关于$y_i$的一阶偏导为
注意代价函数是非凸函数non-convex,所以在最速下降法时会陷入局部最优点而非全局最优. 2002年的paper中采用额外加入一个随机量该随机量随时间而慢慢减小,思路上就像模拟退火的思路.
关于低维空间上相应点的起始位置为随机的位置,这些随机的位置很接近原来的位置.
这里原来的位置可以是高维空间点的位置在低维空间的线性映射的位置, 实际的一种做法可以是使用PCA做线性的降维来得到(我觉得其实完全随机的位置也是可以的,不过训练时间会很长). 设定起始位置之后用梯度下降来调整$y_i$是代价函数最小化
注: 在后来的t-SNE用PCA做线性降维只是减少运算量,例如将784维降维到30, 低维空间的起始点就是随机的
关于paper中提到的混合版本,对复杂度进行退火等问题这里就不研究了,毕竟现在大家常用的是SNE算法的变种t-SNE.
该方法思路清晰,目标明确(在高维空间上相邻/相似的点在低维上也相邻,在高维空间上相隔远的点在低维上也相隔远). 实际效果上不仅降维,同时在低维空间上也能聚类.
因为对高斯核, KL散度都学习过,本来以为很快就能搞懂,实际上数学功底还是不行,在$\sigma$的选择上花了半天时间才搞明白.
运行代码来实际检验的步骤就略去. 毕竟回头还要再说一下t-SNE,在t-SNE的介绍中再用代码来实践.
http://www.cs.toronto.edu/~fritz/absps/sne.pdf Geoffrey Hinton, Sam Roweis